/**
 * @俄罗斯方块成员生成函数接口
 */
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
// 俄罗斯方块成员原始数据对象
// ------------------------------------------------------------------------------
export type TetrisItemObj = { [key in TetrisItemObjType]: TetrisItemObjItem }

// 每个成员对应名称type
// ================================================================
type TetrisItemObjType =
  | 'square'
  | 'bar'
  | 'sShape'
  | 'zShape'
  | 'lShape'
  | 'jShape'
  | 'tShape'

// 每个成员对象中属性定义
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
export interface TetrisItemObjItem {
  stateList: string[]
  stateObj: TetrisItemObjItemStateObj
}

// 每个成员中 stateObj 对象的类型定义
// ================================================================
type TetrisItemObjItemStateObj = {
  [key in TetrisItemObjItemstateListType]?: TetrisItemObjItemStateObjItem
}

// 每个成员中 stateObj 对象的属性名称type
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
type TetrisItemObjItemstateListType = 'top' | 'right' | 'down' | 'left'

// 每个成员中 stateObj 中的每个属性子成员定义类型
// ================================================================
export type TetrisItemObjItemStateObjItem = {
  [key in TetrisItemObjItemstateObjType]: TetrisItemObjItemStateObjItems[]
}

// 每个成员中 stateObj 中的每个属性子成员定义类型名称
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
type TetrisItemObjItemstateObjType =
  | 'allSpot'
  | 'leftSpot'
  | 'rightSpot'
  | 'downSpot'

// 每个成员中 stateObj 中的每个属性子成员最终属性
// ================================================================
export interface TetrisItemObjItemStateObjItems {
  portrait: number
  transverse: number
  color?: string
}

// 俄罗斯方块成员初始化坐标点函数接口
// ------------------------------------------------------------------------------
export interface InitializationTetrisItem {
  (portrait?: number, transverse?: number): InitializationTetrisItemReturn
}

// 定义返回的数据类型接口
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
export interface InitializationTetrisItemReturn
  extends TetrisItemObjItemStateObjItem {
  name: string
  color: string
  stateName: string
  stateListLength: number
  originList: number[]
}

// 提示屏幕成员展示原始数据对象
// ------------------------------------------------------------------------------
export type ExhibitionItemObj = {
  [key in TetrisItemObjType]: ExhibitionItemObjItem
}

// 提示屏幕成员展示原始数据对象成员接口
// ================================================================
type ExhibitionItemObjItem = {
  [key in TetrisItemObjItemstateListType]?: TetrisItemObjItemstateListTypeConst
}
// 提示屏幕成员展示原始数据对象成员属性对应值
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
export type TetrisItemObjItemstateListTypeConst = {
  [key in ExhibitionItemObjItemContent]: number
}

// 提示屏幕成员展示原始数据对象成员接口属性
// ================================================================
type ExhibitionItemObjItemContent = 'portrait' | 'transverse' | 'port' | 'tran'
